package config

import (
	"os"
	"strings"
)

// ServerConfig 服务器配置
type ServerConfig struct {
	// 基础配置
	Host string `json:"host"`
	Port string `json:"port"`
	
	// 域名配置
	Domains []string `json:"domains"`
	
	// 协议配置
	UseHTTPS bool `json:"use_https"`
	
	// 静态文件配置
	StaticPath string `json:"static_path"`
	
	// 图片服务器配置
	ImageServerURL string `json:"image_server_url"`
}

// LoadServerConfig 加载服务器配置
func LoadServerConfig() *ServerConfig {
	config := &ServerConfig{
		Host:       getServerEnv("SERVER_HOST", "0.0.0.0"),
		Port:       getServerEnv("SERVER_PORT", "8080"),
		Domains:    getDomainsFromEnv(),
		UseHTTPS:   getServerEnv("USE_HTTPS", "false") == "true",
		StaticPath: getServerEnv("STATIC_PATH", "./uploads"),
	}
	
	// 构建图片服务器URL
	config.ImageServerURL = buildImageServerURL(config)
	
	return config
}

// getDomainsFromEnv 从环境变量获取域名列表
func getDomainsFromEnv() []string {
	domainsStr := getServerEnv("SERVER_DOMAINS", "127.0.0.1,192.168.0.100")
	domains := strings.Split(domainsStr, ",")
	
	// 清理空白字符
	for i, domain := range domains {
		domains[i] = strings.TrimSpace(domain)
	}
	
	return domains
}

// buildImageServerURL 构建图片服务器URL
func buildImageServerURL(config *ServerConfig) string {
	protocol := "http"
	if config.UseHTTPS {
		protocol = "https"
	}
	
	// 使用第一个域名作为默认图片服务器URL
	if len(config.Domains) > 0 {
		domain := config.Domains[0]
		if config.Port != "" && config.Port != "80" && config.Port != "443" {
			return protocol + "://" + domain + ":" + config.Port
		}
		return protocol + "://" + domain
	}
	
	// 如果没有配置域名，使用默认配置
	return protocol + "://127.0.0.1:" + config.Port
}

// getServerEnv 获取环境变量，如果不存在则返回默认值
func getServerEnv(key, defaultValue string) string {
	if value := os.Getenv(key); value != "" {
		return value
	}
	return defaultValue
}

// GetImageURL 根据请求Host生成图片URL
func (c *ServerConfig) GetImageURL(requestHost, imagePath string) string {
	// 如果图片路径已经是完整URL，直接返回
	if strings.HasPrefix(imagePath, "http") {
		return imagePath
	}
	
	// 如果图片路径为空，返回空字符串
	if imagePath == "" {
		return ""
	}
	
	// 确定协议
	protocol := "http"
	if c.UseHTTPS {
		protocol = "https"
	}
	
	// 使用请求的Host，如果没有则使用默认配置
	host := requestHost
	if host == "" {
		if len(c.Domains) > 0 {
			host = c.Domains[0]
		} else {
			host = "127.0.0.1:" + c.Port
		}
	}
	
	// 确保host包含端口（如果不是标准端口）
	if !strings.Contains(host, ":") {
		if c.Port != "" && c.Port != "80" && c.Port != "443" {
			host += ":" + c.Port
		}
	}
	
	return protocol + "://" + host + imagePath
}
